# 设置 CMake 的最低版本要求为 3.16
cmake_minimum_required(VERSION 3.16)

# 定义项目名称为 "SBOT"，版本号为 0.1，使用的编程语言为 C++
project(SBOT VERSION 0.1 LANGUAGES CXX)

# 设置构建模式为 Debug 模式
# set(CMAKE_BUILD_TYPE Debug)

# 启用自动 MOC，RCC 功能
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

# 指定 C++ 标准版本为 C++11，并要求编译器严格遵循该标准
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 查找并加载 Qt 模块
find_package(Qt6 REQUIRED COMPONENTS Core Quick QuickControls2)

# 获取头文件列表
file(GLOB HEADERS
    *.h
    *.hpp
    ./Src/*.h
    ./Src/*.hpp
)

# 获取源文件列表
file(GLOB SOURCES
    *.c
    *.cpp
    ./Src/*.c
    ./Src/*.cpp
)


# 查找并添加 Module 目录下的模块文件
file(GLOB MODULE_DIRS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/Modules ${CMAKE_CURRENT_SOURCE_DIR}/Modules/*)
set(ALL_MODULE_RESOURCES "")
foreach(MODULE_DIR ${MODULE_DIRS})
    if(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Modules/${MODULE_DIR})
        set(MODULE_RESOURCES "")
        if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/Modules/${MODULE_DIR}/CMakeLists.txt)
            add_subdirectory(Modules/${MODULE_DIR})
            if(MODULE_RESOURCES)
                list(APPEND ALL_MODULE_RESOURCES ${MODULE_RESOURCES})
            endif()
        endif()
    endif()
endforeach()

# 添加资源文件到项目中
qt_add_resources(RESOURCE
    ${CMAKE_CURRENT_SOURCE_DIR}/Res/UiRes.qrc
    ${ALL_MODULE_RESOURCES} # 模块资源文件
)

# 添加 Windows 平台的资源文件（图标、版本信息）
enable_language("RC")
set(WIN_RESOURCES 
    ${CMAKE_CURRENT_SOURCE_DIR}/Res/WinRes.rc
)

# 添加可执行文件，并包含资源文件
add_executable(${PROJECT_NAME} WIN32
    ${SOURCES}
    ${HEADERS}
    ${RESOURCE}
    ${WIN_RESOURCES}
)

# 添加头文件路径到项目中
target_include_directories(${PROJECT_NAME} PUBLIC
    ${CMAKE_CURRENT_SOURCE_DIR}/Src
)

# 生成控制台应用程序，用于调试时打印信息
set_target_properties(${PROJECT_NAME} PROPERTIES
    WIN32_EXECUTABLE OFF
)

# 链接所需的库
target_link_libraries(${PROJECT_NAME}
    PRIVATE
    dwmapi
    user32
    Qt6::Core
    Qt6::Quick
    Qt6::QuickControls2
)
